import { wxlogin, getInfo, logout } from '../../utils/http/httpUser';

Page({

  /**
   * 页面的初始数据
   */
  data: {
    hasUserInfo: false,
    userInfo: {
      avatarUrl: '',
      nickName: '',
      userName: ''
    }
  },

  // 用户注销事件监听器引用，用于页面销毁时移除监听
  logoutEventListener: null as Function | null,

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad() {
    this.checkLoginStatus();
    this.initEventListeners();
  },

  /**
   * 初始化事件监听器
   */
  initEventListeners() {
    const app = getApp<IAppOption>();
    
    // 创建用户注销事件监听器
    this.logoutEventListener = () => {
      console.log('Profile页面收到用户注销事件，更新UI');
      this.handleLogoutSuccess();
    };
    
    // 监听用户注销事件
    if (app.globalData && app.globalData.eventBus) {
      app.globalData.eventBus.on('user:logout', this.logoutEventListener);
    }
  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {
    // 移除事件监听器，避免内存泄漏
    const app = getApp<IAppOption>();
    if (app.globalData && app.globalData.eventBus && this.logoutEventListener) {
      app.globalData.eventBus.off('user:logout', this.logoutEventListener);
      this.logoutEventListener = null;
    }
  },

  /**
   * 检查登录状态
   */
  checkLoginStatus() {
    const token = wx.getStorageSync('token');
    if (token) {
      // 已登录状态，调用getInfo获取用户信息
      getInfo().then(userInfo => {
        // 更新界面显示
        this.setData({
          hasUserInfo: true,
          userInfo: {
            avatarUrl: userInfo.avatar || '',  // 使用后台返回的头像
            nickName: userInfo.nickName || '微信用户',  // 使用后台返回的昵称
            userName: userInfo.userName || ''  // 使用后台返回的用户名
          }
        });
        console.log('已登录，获取用户信息成功:', userInfo);
      }).catch(err => {
        console.error('获取用户信息失败:', err);
      });
    } else {
      // 未登录状态
      this.setData({
        hasUserInfo: false,
        userInfo: {
          avatarUrl: '',
          nickName: '',
          userName: ''
        }
      });
      console.log('未登录');
    }
  },

  /**
   * 微信登录
   */
  login() {
    wx.login({
      success: (res) => {
        if (res.code) {
          // 获取到登录凭证（code）
          console.log('登录成功，code:', res.code);
          
          // 调用http.ts中的wxlogin函数请求后台
          wxlogin(res.code).then(() => {
            // 更新登录状态
            this.checkLoginStatus();
            
            wx.showToast({
              title: '登录成功',
              icon: 'success'
            });
          }).catch(err => {
            console.warn('登录失败：', err);
        // 判断是否是用户不存在的错误
        if (err && err.msg && err.msg.includes('用户不存在')) {
          wx.showModal({
            title: '提示',
            content: '当前用户不存在，是否注册新用户？',
            success: (res) => {
              if (res.confirm) {
                wx.navigateTo({
                  url: '/pages/register/register'
                });
              }
            }
          });
        } else {
          // 其他登录失败情况
          wx.showToast({
            title: '登录失败',
            icon: 'error'
          });
        }
          });
          
        } else {
          console.log('登录失败：' + res.errMsg);
          wx.showToast({
            title: '登录失败',
            icon: 'error'
          });
        }
      },
      fail: (err) => {
      console.error('登录失败：', err);
        wx.showToast({
          title: '登录失败',
          icon: 'error'
        });
      }
    });
  },

  /**
   * 跳转到设置页面
   */
  goToSetting() {
    wx.showToast({
      title: '设置功能开发中',
      icon: 'none'
    });
  },

  /**
   * 跳转到订单列表
   */
  goToOrderList(e: WechatMiniprogram.TouchEvent) {
    const status = e.currentTarget.dataset.status;
    wx.showToast({
      title: `${status}订单列表开发中`,
      icon: 'none'
    });
  },

  /**
   * 跳转到法律条款页面
   */
  goToLegalTerms() {
    wx.showToast({
      title: '法律条款页面开发中',
      icon: 'none'
    });
  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
    // 每次显示页面时检查登录状态，以便在其他页面登录/登出后更新状态
    // this.checkLoginStatus();
  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {
    this.checkLoginStatus();
    wx.stopPullDownRefresh();
  },
  
  /**
   * 退出登录
   */
    logout() {
      wx.showModal({
        title: '提示',
        content: '确定要退出登录吗？',
        success: (res) => {
          if (res.confirm) {
            // 调用退出登录接口
            logout().then((res: { msg: string; code: number }) => {
              if (res.code === 200) {
                // 通过事件总线触发用户注销，保持一致性
                const app = getApp<IAppOption>();
                if (app.globalData && app.globalData.eventBus) {
                  app.globalData.eventBus.emit('user:logout');
                }
                
                wx.showToast({
                  title: '已退出登录',
                  icon: 'success'
                });
              } else {
                wx.showToast({
                  title: res.msg || '退出登录失败',
                  icon: 'none'
                });
              }
            }).catch((err: any) => {
              // 请求异常时也通过事件总线触发注销
              const app = getApp<IAppOption>();
              if (app.globalData && app.globalData.eventBus) {
                app.globalData.eventBus.emit('user:logout');
              }
              
              wx.showToast({
                title: '网络异常，但已本地退出',
                icon: 'none'
              });
              console.error('退出登录失败：', err);
            });
          }
        }
      });
    },
    
    /**
     * 处理退出登录成功的UI更新
     */
    handleLogoutSuccess() {
      // 注意：token和userInfo的清除已在http.ts的handleUnauthorized函数中处理
      // 这里只需要更新UI状态
      this.setData({
        hasUserInfo: false,
        userInfo: {
          avatarUrl: '',
          nickName: '',
          userName: ''
        }
      });
      console.log('Profile页面UI已更新为未登录状态');
    }
});

